// 模拟 lodash 中的 flowRight 
const _ = require('lodash');

const  reverse = arr => arr.reverse() ;
const  first = arr =>  arr[0] ;
const  toUpper = s =>  s.toUpperCase() ;

// function compose (...args) {
//     return function (value) {
//         //先对参数数组进行翻转  
//         //reduce用于 对数组每个元素执行提供的函数，并汇总成一个单个的结果
//         //acc为上次执行完的结果  fn为数组内的方法  value为执行方法时的初始值
//         return args.reverse().reduce(function (acc, fn) {
//             return fn(acc);
//         }, value);
//     }
// }


//使用箭头函数重写上方的函数
const compose = (...args) =>  value => args.reverse().reduce( (acc, fn) =>  fn(acc), value );

const f = compose(toUpper, first, reverse);  //从右到左执行 将结果以此传递给下一个函数
console.log(f(['one', 'two', 'three']));